package com.cqw.commontest.optional;

import com.cqw.domain.SysUser;

import java.util.Optional;

/**
 * @Author: caoqingwen
 * @CreateTime: 2021-05-22 22:16
 * @Description:
 */
public class OptionalTest {


    public static void main(String[] args) {
        SysUser user = new SysUser();
        //of:
        //为非 null 的值创建一个 Optional。of 方法通过工厂方法创建 Optional 类。
        //需要注意的是，创建对象时传入的参数不能为 null。如果传入参数为 null，则抛出 NullPointerException 。
        //报错   NullPointerException
        /*Optional<User> user1 = Optional.of(user);*/


        //ofNullable:
        //为指定的值创建一个 Optional，如果指定的值为 null，则返回一个空的 Optional。
        //不报错，返回了Optional.empty
        Optional<SysUser> user2 = Optional.ofNullable(user);


        //isPresent:
        //值存在返回 true，否则返回 false
        boolean present = user2.isPresent();
        System.out.println(present);        //false


        //get:
        //Optional 有值就返回，没有抛出 NoSuchElementException
        //java.util.NoSuchElementException: No value present
        /*User user1 = user2.get();*/

        //ifPresent:
        //如果 Optional 有值则调用 consumer 处理，否则不处理
        user2.ifPresent(c -> user.setUserName(c.getUsername()));


        //orElse:
        //如果有值则将其返回，否则返回指定的其它值
        Object orElse = Optional.ofNullable("123").orElse("没有值");
        System.out.println(orElse);


        //map:
        //如果有值，则对其执行调用 mapping 函数得到返回值。
        //如果返回值不为 null，则创建包含 mapping 返回值的 Optional 作为 map 方法返回值，否则返回空 Optional。
        Optional<String> optional = Optional.ofNullable("123");
        Optional<String> s = optional.map(e -> {
            SysUser user1 = new SysUser();
            user1.setUserName(e);
            return "";
        });


        //总结：常用的
        SysUser user1 = new SysUser();

        Optional.ofNullable(user1).ifPresent(user3 -> {


        });


    }


}
